# 30. 模块的初始


# 什么是模块

模块:由很多方法或类或函数集合形成的一个.py文件或一个文件夹或c语言编译好的一些编译文件

Python解释器本身就不会带有太多的功能,有很多的功能都放在内置模块中,但是内置模块的功能也是有限,那么外部大神就自己开发一些模块放在网上供大家使用,需要的时候在安装调用


那为什么要用模块

  1. 有一些功能开发者无法独立开发,这时就需要别人写好的模块,来完成这些功能
  2. 实现一些Python本身自带的函数或方法无法实现的功能
    1. 比如和操作系统交互
    2. 和时间交互
    3. 取相对应的随机数
    4. 跟网络通信交互
    5. 等等等

那为什么要有模块

  1. 方便开发者分类管理
  2. 可以有效的节省内存
  3. 提供更多的功能


# 模块的分类

模块分为:内置模块、第三方模块/扩展模块、自定义模块

内置模块

  1. 是由Python解释器自带的模块
  2. 不用安装,直接引用就可以直接使用

第三方模块/扩展模块

  1. 由一些大神开发出的模块
  2. 需要安装后才可以使用

自定义模块

  1. 可以自己定义一些模块
  2. 一个文件夹或一个.py文件就可以当成一个模块使用


# 模块名和模块使用规范

模块名规范跟变量名规范一样,但是要注意一点:模块名是由小写字母开头的,不会以大写字母开头

模块使用的 PEP8 规范

  1. 一个import只能导入一个模块,虽然python支持导入多个模块,但是PEP8规定一个import只能导入一个模块
  2. 所有的模块导入都要放在文件的开头处
  3. 模块的导入顺序
    1. 内置模块
    2. 第三方模块
    3. 自定义模块

强烈建议:按照PEP8规范来使用模块,尽量让自身的代码规范化



# 模块的初用

用自定义模块来入门

模块文件

用一个.py文件来当模块

print("这是一个自定义模块中的打印输出")
name = "这是一个自定义模块中的变量"
def inso():
    print("这是一个自定义模块中的函数") 

模块的导入跟使用

import so_msg  ## .py模块文件导入不需要写.py
print(so_msg.name)
so_msg.inso()

执行结果:
这是一个自定义模块中的打印输出
这是一个自定义模块中的变量
这是一个自定义模块中的函数

# 模块更名

模块导入的时候更改名称,但是更改不是模块文件名,而是在当前内存空间的这个模块的变量名

import so_msg as s  ## 将so_msg 更改成 s
print(s.name)
s.inso()

执行结果:
这是一个自定义模块中的打印输出
这是一个自定义模块中的变量
这是一个自定义模块中的函数

# 使用模块时的执行顺序

当python执行代码到 import 时

  1. 一般变量是不是先执行右边的,右边执行完在把结果赋值给左边的变量名,模块也是一样
  2. import os 时,生成一个空间,将os对应的py文件,中相对应对象写入这个空间中
  3. 在把这个空间内存地址保存在当前的py文件空间中,保存名就是模块名
  4. 模块导入后,模块名 == 变量,就可以直接拿模块名来使用
  5. 在更改模块名的时候(import os as s),实际是把当前内存空间的os变量名改成s